
/**
 * 接收一个动作类型作为参数\
 * 返回一个函数\
 *   返回的函数可以返回一个动作对象\
 *   返回的函数有一个 type 属性 其中值是动作类型\
 */
function createAction(type, prepareAction){
  function actionCreator(payload) {
    if (prepareAction) { // 判断是否需要动态生成 payload
      const preparedAction = prepareAction.call(null, payload)
      return {
        type,
        ...preparedAction
      }
    }
    return {
      type,
      payload
    }
  }

  actionCreator.toString = () => type

  actionCreator.type = type // 给函数扩展一个 type 属性 其中值是动作类型
  return actionCreator
}

export default createAction
